package 反射;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class 分析性能 {
        // 普通方式调用
        public static void test01(){
            User user = new User();

            long startTime = System.currentTimeMillis();
            for (int i = 0; i < 1000000000; i++) {
                user.getName();
            }
            long endTime = System.currentTimeMillis();

            System.out.println("普通方式"+(endTime-startTime)+"ms");
        }

        // 反射方式调用
        public static void test02() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
            User user = new User();
            Class c1 = user.getClass();
            Method getName = c1.getDeclaredMethod("getName", null);
            long startTime = System.currentTimeMillis();
            for (int i = 0; i < 1000000000; i++) {
                getName.invoke(user,null);
            }
            long endTime = System.currentTimeMillis();
            System.out.println("反射方式"+(endTime-startTime)+"ms");
        }

        // 反射方式调用 安全检测关
        public static void test03() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
            User user = new User();
            Class c1 = user.getClass();
            Method getName = c1.getDeclaredMethod("getName", null);
            getName.setAccessible(true); // 关闭
            long startTime = System.currentTimeMillis();
            for (int i = 0; i < 1000000000; i++) {
                getName.invoke(user,null);
            }
            long endTime = System.currentTimeMillis();
            System.out.println("反射方式关闭检测"+(endTime-startTime)+"ms");
        }




    public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
        test01();
        test02();
        test03();
    }
}
